package com.hb.core.pojo.project.notice.dto;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.json.JSONArray;
import com.hb.core.pojo.project.notice.entity.Notice;
import com.hb.core.pojo.project.notice.entity.NoticeBidSection;
import com.hb.core.pojo.project.section.dto.BidSectionDTO;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.fzzn.core.model.enums.MsgEnum;

import java.util.List;

/**
 * 新增公告数据传输对象
 *
 * @author zhaojk
 */
@Setter
@Getter
@ApiModel(value = "NoticeDto对象", description = "新增其他公告参数模型")
public class NoticeDTO extends Notice {
    /**
     * 标段ID
     */
    private Long sectionId;
    /**
     * 标段编号
     */
    private String sectionCode;

    @ApiModelProperty(value = "计费方式(1.固定金额.2.非固定金额)")
    private Integer billingMethod;

    @ApiModelProperty(value = "邀请方式")
    private Integer invitationMethod;

    @ApiModelProperty(value = "收取方式1 线下 2线上")
    private Integer collectionMethod;

    @ApiModelProperty(value = "是否支持保函  1 是 2:否")
    private Integer guaranteeFlag;

    @ApiModelProperty(value = "保证金")
    private String bond;

    @ApiModelProperty(value = "附件")
    private JSONArray mediumList;


    @ApiModelProperty(value = "是否报名")
    private Integer signUpFlag;

    // 用于前端显示或者渲染的字段 start
    /**
     * 标段名称
     */
    private String sectionName;
    /**
     * 公告性质名称
     */
    private String noticeNatureName;
    /**
     * 发布状态名称
     */
    private String deployStatusName;
    // 用于前端显示或者渲染的字段 end

    /**
     * 项目编号
     */
    private String projectCode;
    /**
     * 项目名称
     */
    private String projectName;
    /**
     * 用户类型(1: 超级管理员，2：企业管理员，3：常规用户)
     */
    private Integer userType;
    /**
     * 公告会包含多个标段
     **/
    private List<BidSectionDTO> bidSectionList;

    /**
     * 该字段必填前端传值
     * 该字段表示当前公告的保存内容
     * 根据前端页面的传值判断各参数的验证信息
     * 1: 公告基本信息及关联标段的保存
     * 2: 公告编辑内容的保存
     */
    private Integer noticeFormFlag;


    /**
     * 项目招标类型: 1: 公开, 2: 邀请
     */
    private Integer commonType;


    /**
     * 公告邀请的企业信息
     **/
    private List<TenderInviteEnterpriseDTO> tenderInviteEnterpriseDTOList;
    /**
     * 公告关联的标段列表
     **/
    List<NoticeBidSection> noticeBidSections;

    /**
     * 邀请书绑定的标段，企业对象
     **/
    private List<NoticeBidSectionOrgDTO> bidSectionOrgList;

    /**
     * 新增其他公告参数验证
     *
     * @return
     */
    @Override
    public String paramsValid(String... fieldNames) {
        if (noticeFormFlag == null) {
            return MsgEnum.INCORRECT_PARAM.msg();
        }
        if (this.getNoticeNature() == null) {
            return "公告性质(公告类型)不能为空";
        }
        if (Integer.valueOf(1).equals(this.getNoticeFormFlag()) && CollUtil.isEmpty(getBidSectionList())){
            return "请添加标段信息";
        }
        return null;
    }

}
